use std::cell::Cell;
struct Foo {
    // 内部可变性的Cell
    x: Cell<i32>,
}

fn main() {
    let foo = Foo { x: Cell::new(0) };
    // foo是Foo的不可变引用
    foo.x.set(44); // 通过不可变引用来修改值
    println!("{}", foo.x.get()) // 修改成功
}

//  Rc的clone方式
// fn clone(&self) -> Rc<T> {
//     // 增加引用计数
//     self.inner().inc_strong();
//     // 通过 self.ptr 生成一个新的 Rc 结构
//     Self::from_inner(self.ptr)
// }

// Rc 的 clone() 方法传入的参数是 &self ，是个不可变引用
// 但是内部确实可变的Cell, 所以可以修改值
